<?php

Yii::import('ventas.models._base.BasePedido');

class Pedido extends BasePedido {

    public $numeroFactura;
    public $date_first;
    public $date_last;
    public $rangoFechas;
    public $fechas;
    public $total;
    public $persona;

    const ESTADO_ACTIVO = 'ACTIVO';
    const ESTADO_INACTIVO = 'INACTIVO';

    /**
     * @return Pedido
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Pedido|Pedidos', $n);
    }

    public function rules() {
        return array(
            array('ticket_id, fecha, valor_total,empleado_id', 'required'),
            array('facturacion', 'ext.YiiConditionalValidator.YiiConditionalValidator',
                'if' => array(
                    array('facturacion', 'compare', 'compareValue' => '1'),
                ),
                'then' => array(
                    array('numeroFactura', 'required'),
//                    array('precio', 'compare', 'compareAttribute' => 'valorMinimo', 'operator' => '>', 'message' => 'Precio no puede ser nulo o 0.00.'),
                ),
            ),
            array('ticket_id, estado_pago, facturacion', 'numerical', 'integerOnly' => true),
            array('valor_total,numeroFactura', 'length', 'max' => 10),
            array('estado', 'length', 'max' => 7),
            array('fecha, observaciones', 'safe'),
            array('estado', 'in', 'range' => array('ABIERTO', 'CERRADO', 'ANULADO')), // enum,
            array('estado_pago, estado, facturacion,reservacion', 'default', 'setOnEmpty' => true, 'value' => null),
            array('id, ticket_id, fecha, valor_total,numeroFactura, estado_pago, ,reservacion,estado, facturacion, empleado_id,observaciones,total', 'safe', 'on' => 'search'),
        );
    }

    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'ticket_id' => Yii::t('app', 'Ticket'),
            'fecha' => Yii::t('app', 'Fecha'),
            'valor_total' => Yii::t('app', 'Valor Total'),
            'total' => Yii::t('app', 'Total'),
            'estado_pago' => Yii::t('app', 'Estado Pago'),
            'estado' => Yii::t('app', 'Estado'),
            'facturacion' => Yii::t('app', 'Facturacion'),
            'reservacion' => Yii::t('app', 'Reservación'),
            'observaciones' => Yii::t('app', 'Observaciones'),
            'numeroFactura' => Yii::t('app', '# Factura'),
            'empleado_id' => Yii::t('app', 'Empleado'),
            'facturas' => null,
            'ticket' => null,
            'pedidoMenus' => null,
            'persona' => null,
        );
    }

    public function search() {
        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id);
        $criteria->compare('ticket_id', $this->ticket_id);
        $criteria->compare('fecha', $this->fecha, true);
        $criteria->compare('valor_total', $this->valor_total, true);
        $criteria->compare('estado_pago', $this->estado_pago);
        $criteria->compare('estado', $this->estado, true);
        $criteria->compare('facturacion', $this->facturacion);
        $criteria->compare('observaciones', $this->observaciones, true);
        $criteria->compare('empleado_id', $this->empleado_id);
        $criteria->compare('estado_pedido', $this->estado_pedido, true);
        $criteria->compare('reservacion', $this->reservacion);

        if ((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
            $criteria->addBetweenCondition('fecha', '' . Util::FormatDate($this->date_first, "Y-m-d") . ' 00:00:00', '' . Util::FormatDate($this->date_last, "Y-m-d") . ' 23:59:59');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    public function searchReservacion() {
        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id);
        $criteria->compare('ticket_id', $this->ticket_id);
        $criteria->compare('fecha', $this->fecha, true);
        $criteria->compare('valor_total', $this->valor_total, true);
        $criteria->compare('estado_pago', $this->estado_pago);
        $criteria->compare('estado', $this->estado, true);
        $criteria->compare('facturacion', $this->facturacion);
        $criteria->compare('observaciones', $this->observaciones, true);
        $criteria->compare('empleado_id', $this->empleado_id);
        $criteria->compare('estado_pedido', $this->estado_pedido, true);
        $criteria->compare('reservacion', $this->reservacion);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    public function searchEmpleado() {
        $criteria = new CDbCriteria;
        $criteria->select = "empleado_id,ticket_id, sum(valor_total) as total";

        $criteria->compare('id', $this->id);
        $criteria->compare('ticket_id', $this->ticket_id);
        $criteria->compare('fecha', $this->fecha, true);
        $criteria->compare('valor_total', $this->valor_total, true);
        $criteria->compare('estado_pago', $this->estado_pago);
        $criteria->compare('estado', $this->estado, true);
        $criteria->compare('facturacion', $this->facturacion);
        $criteria->compare('observaciones', $this->observaciones, true);
        $criteria->compare('empleado_id', $this->empleado_id);
        $criteria->compare('estado_pedido', $this->estado_pedido, true);
        $criteria->addCondition('estado!="ANULADO"', 'AND');

        if ((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
            $criteria->addBetweenCondition('fecha', '' . Util::FormatDate($this->date_first, "Y-m-d") . ' 00:00:00', '' . Util::FormatDate($this->date_last, "Y-m-d") . ' 23:59:59');
        $criteria->group = "empleado_id";
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    public function searchGanancias() {
        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id);
        $criteria->compare('ticket_id', $this->ticket_id);
        $criteria->compare('fecha', $this->fecha, true);
        $criteria->compare('valor_total', $this->valor_total, true);
        $criteria->compare('estado_pago', $this->estado_pago);
        $criteria->compare('estado', $this->estado, true);
        $criteria->compare('facturacion', $this->facturacion);
        $criteria->compare('observaciones', $this->observaciones, true);
        $criteria->compare('empleado_id', $this->empleado_id);
        $criteria->compare('estado_pedido', $this->estado_pedido, true);
        $criteria->compare('reservacion', $this->reservacion);
        $criteria->addCondition('estado!="ANULADO"', 'AND');

        if ((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
            $criteria->addBetweenCondition('fecha', '' . Util::FormatDate($this->date_first, "Y-m-d") . ' 00:00:00', '' . Util::FormatDate($this->date_last, "Y-m-d") . ' 23:59:59');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 20,
            ),
        ));
    }

    // para comparar valores BORRAR
    public function searchCuentasCampaniasGrupos($campania_id) {
//  select 
//  g.nombre, count(co.id)
//  from   cuenta t 
//  inner join (grupo_cuenta gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.cuenta_id
//  inner join   (contacto co inner join grupo_contacto gc ON gc.contacto_id = co.id ) ON co.cuenta_id = t.id
//  where co.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = 9)
//  group by g.id
        $criteria = new CDbCriteria;
        $criteria->select = " count(co.id) as numCuentas,g.id as id, g.nombre as nombreGrupo";
        $criteria->join = "inner join (grupo_cuenta gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.cuenta_id";
        $criteria->join .= "  inner join (contacto co inner join grupo_contacto gc ON gc.contacto_id = co.id ) ON co.cuenta_id = t.id";
        $criteria->addCondition('co.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = :camapania_id)', 'AND');
        $criteria->group = "g.id";
        $criteria->params = array(':camapania_id' => $campania_id);
//        die(var_dump($criteria));
        return new CActiveDataProvider('Cuenta', array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    public function scopes() {
        return array(
            'activos' => array(
                'condition' => 't.estado_pedido = :estado_pedido',
                'params' => array(':estado_pedido' => Pedido::ESTADO_ACTIVO),
                'order' => 'fecha DESC',
            ),
            'pedientes_pago' => array(
                'condition' => 't.estado_pago = :estado_pago',
                'params' => array(':estado_pago' => 1),
                'order' => 'fecha DESC',
            ),
            'reservados' => array(
                'condition' => 't.reservacion = :reservacion AND t.estado=:estado',
                'params' => array(':reservacion' => 1, ':estado' => 'ANULADO'),
//                'order' => 'fecha ASC',
            ),
            'efectivos' => array(
                'condition' => 't.estado != "ANULADO"',
//                'order' => 'fecha ASC',
            ),
             'ordenDescendente' => array(
                'order' => 't.fecha DESC',
            ),
        );
    }

    public function de_rango($inicio, $fin) {
        $inicio = Util::FormatDate($inicio, 'Y-m-d 00:00:00');
        $fin = Util::FormatDate($fin, 'Y-m-d 23:59:59');
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.fecha BETWEEN :inicio AND :fin',
                    'params' => array(
                        ':inicio' => $inicio,
                        ':fin' => $fin
                    ),
                )
        );
        return $this;
    }

    public function cierreCajaEmpleado($cierreCaja) {

        $command = Yii::app()->db->createCommand()
                ->select("
                     SUM(p.valor_total) as total
                        ")
                ->from("pedido p")
//                ->join('campania_accion cacc', 'ca.id=cacc.campania_id')
                ->where("p.empleado_id=:empleado_id and p.estado!='ANULADO' and p.fecha between :inicio AND :fin", array(
            ':empleado_id' => $cierreCaja->empleado_id,
            ':inicio' => $cierreCaja->fecha_inicio,
            ':fin' => $cierreCaja->fecha_cierre,
        ));
        $resultado = $command->queryAll();



        return $resultado[0]['total'] ? $resultado[0]['total'] : 0;
    }

    public function obtenerPrecioCostoPedido() {

        $menus_de_pedido = $this->pedidoMenus;
//        var_dump($menus_de_pedido);

        $valor_total = 0;
        foreach ($menus_de_pedido as $menu) {

//            $productosMenu = MenuProducto::model()->findAll(array('condition' => 'menu_id=:menu_id', 'params' => array(':menu_id' => $menu->menu_id)));
//            foreach ($productosMenu as $value) {
            $valor_total += ($menu->menu->obtenerPrecioCostoMenu() * $menu->cantidad);
//                var_dump($valor_total);
//            }
        }

        return $valor_total;

//        var_dump($productosMenu);
//        die();
    }

    public function validarMenusVisibles() {

//        $pedido=  Pedido::model()->findByPk($id);
        $menus = $this->pedidoMenus;
        $validacion = false;
        foreach ($menus as $value) {

            if ($value->menu->seccion->cocina==1){
                $validacion=true;
            }
        }
        return $validacion;
//        var_dump($menus);
    }

}
